#pragma once

template <typename _Tp>
class AbsFunctionalCls
{
private:
    const _Tp FUNC;
public:
    AbsFunctionalCls() = default;
    AbsFunctionalCls(const _Tp &FUNC) : FUNC(FUNC) {}
    AbsFunctionalCls(_Tp &&FUNC) : FUNC(std::move(FUNC)) {}
    ~AbsFunctionalCls() = default;

    template<typename... Args>
    auto CallBack(Args&&... args) -> decltype(FUNC(std::forward<Args>(args)...)) {
        return FUNC(std::forward<Args>(args)...);
    }
};
